/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.gestion_jeu;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Observable;
import model.serialisation.Serialisateur;

/**
 *
 * @author ANNAS
 */
public class AdaptateurSauvvegarde extends Observable{
    Serialisateur s;
    ArrayList<String> resultat;
    private static String fichierSauvegarde = "sauvegarde.txt";
    static{
        try {
            File f = new File(AdaptateurSauvvegarde.fichierSauvegarde);
            if(!f.exists())
                f.createNewFile();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    private static AdaptateurSauvvegarde instance;
    
     /**
     * Récupération de l'instance
     */
    public static AdaptateurSauvvegarde getInstance()
    {
        if(instance==null)
            instance = new AdaptateurSauvvegarde();
        return instance;
    }
    private AdaptateurSauvvegarde()
    {
        
    }
    
     /**
     * Charge une partie à partir d'un fichier format
     * @param nomSauvegarde
     *      nom du fichier à récupérer pour restaurer la partie
     * @return 
     *      retourne la partie à charger
     */
    public Partie chargerLaPartie(String nomSauvegarde)
    {
        
       Object o = s.charger(nomSauvegarde);
       Format f = (Format)o;
       Partie p = new Partie(f);
       return p;
    }
    
    /**
     * sauvegarde un format
     * @param f    
     *      format à sauvegarder
     * @return
     *      retourne vrai s'il n'y pas pas eu d'erreur
     *      retourne faux sinon
     */
    public boolean sauvegarder(Format f)
    {
        
        File fil = s.save(f);
        try {
            PrintWriter pr=new PrintWriter(new File(AdaptateurSauvvegarde.fichierSauvegarde));
            pr.println(fil.getName());
            pr.close();
            return true;
        } catch (IOException ex) {
            ex.printStackTrace();
            return false;
        }
    }
 
     /**
     * Charge la liste des parties disponibles
     */
    public void chargerListeDesParties()
    {
         resultat = new  ArrayList<String>();
         try {
            FileReader fr = new FileReader(new File(AdaptateurSauvvegarde.fichierSauvegarde));
            BufferedReader br=new BufferedReader(fr);
            String ligne;
            while ((ligne=br.readLine())!=null){
                    resultat.add(ligne);
            }
            br.close();
            this.setChanged();
            this.notify();
        } catch (IOException ex) {
            ex.printStackTrace();
            resultat.clear();
        }
    }

     /**
     * Recupère la liste des parties disponibles
     * @return  
     *      Liste des parties disponible
     */
    public ArrayList<String> getListeDesParties() {
        return resultat;
    }
    
    
}
